package com.cos.lession72.web.controller;

import com.cos.lession72.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Map;

/**
 * @author: COS
 * @time: 2022/9/28 14:28
 * @description:
 */
@Controller
@RequestMapping("/param")
public class ParamDemoController {
    /**
     * @author: COS
     * @return:
     * @time: 2022/9/28 14:30
     * @description: 获取参数方式1
     * 老方式
     * 需要在形参上声明HttpServletRequest request,springMVC会自己把reqeust对象传入使用
     * 如果SpringMVC的Controller的方法需要使用到request, response ,session
     * 直接在方法形参上设置对应的参数即可
     */
    @RequestMapping("/demo1")
    public String getInfo(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        String name = request.getParameter("name");
        String age = request.getParameter("age");
        System.out.println(name);
        System.out.println(Integer.valueOf(age));
        System.out.println(session.getId());
        return "";
    }

    /**
     * @author: COS
     * @return:
     * @time: 2022/9/28 14:37
     * @description: 获取参数方式2: 在形参设置,springMVC会自动转换类型
     * 需要获取数据
     * 直接在方法的形参上设置对应数据的数据类型和属性名即可,
     * 形参的属性名,必须和提交的数据的name值一致
     * 他换回帮助我们自动进行类型转换
     */
    @RequestMapping("/demo2")
    public String getINfo2(String name, Integer age) {
        System.out.println(name);
        System.out.println(10 / 0);
        System.out.println(age + 1);
        return null;
    }

    /**
     * @author: COS
     * @return:
     * @time: 2022/9/28 14:56
     * @description: 第3中获取参数的方式, 只用对象形参,
     * spring会自动帮我们把数据封装到对象的属性中
     * 需要前端提交的参数name和对象属性的名一样
     */
    @RequestMapping("/demo3")
    public String getInfo3(User user) {
        System.out.println(user);
        return null;
    }
    /**
     *
     * @author: COS
     * @return:
     * @time: 2022/9/28 15:36
     * @description:
     * 如果需要使用map来接受前端传入的参数时
     * 注意需要加上@RequestParam
     * 标注这个map是用于接受前端参数使用的
     */
    @RequestMapping("/demo4")
    public String getInfo4(@RequestParam Map<String, Object> maps) {
        System.out.println(maps);
        return null;
    }
    /**
     *
     * @author: COS
     * @return:
     * @time: 2022/9/28 15:39
     * @description:
     * @RequestParam("ename")
     * 作用1:
     *      设置前端传入参数的name的值,
     * 作用2:
     *      单独设置他的value,这个参数默认为必须提供的参数,即不能为 null
     *      可以设置参数required = false 为非必须提供的参数
     */
    @RequestMapping("/demo5")
    public String getInfo5(@RequestParam(value = "ename",defaultValue = "张三") String name,
                          @RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum) {
        System.out.println(name);
        System.out.println(pageNum);
        return null;
    }
}
